import { post, ResultBean } from "@/utils/request";
/**
 * 新建视图-请求体定义
 * 与后端字段对齐：
 * - viewName: 视图名称，非空，最大30
 * - viewType: 视图类型（process|task|view 等），非空，最大20
 * - viewUi: 前端配置视图JSON（建议为 JSON.stringify 后的字符串）
 * - columnDefinition: 视图的字段名称使用，符号拼接（可选，最大500）
 * - columnType: 视图的字段类型，符号拼接（可选，最大240）
 */
export interface CreateViewDto {
  /** 视图名称，非空，最大30 */
  viewName: string;
  /** 视图描述，可选 */
  viewDesc?: string;
  /** 视图类型：process 流程；task 任务/菜单节点；view 默认视图 */
  viewType: string; // 'process' | 'task' | 'view' 也可在实际使用处做联合类型收窄
  /** 前端配置视图 JSON 字符串（如：JSON.stringify({ pageData, allFormConfig })） */
  viewUi: string;
  /** 字段名称使用（符号拼接），可选 */
  columnDefinition?: string;
  /** 字段类型（符号拼接），可选*/
  columnType?: string;
}

/**
 * 辅助构造器：由表单与设计器数据构造 CreateViewDto
 * 注意：如需严格类型约束 viewType，可在调用层提供更严格的联合类型
 */
export function buildCreateViewDto(params: {
  viewName: string;
  viewDesc: string;
  viewType?: string; // 默认 'view'
  pageData: unknown[];
  allFormConfig: Record<string, unknown>;
  columnDefinition?: string;
  columnType?: string;
}): CreateViewDto {
  const {
    viewName,
    viewDesc,
    viewType = "view",
    pageData,
    allFormConfig,
    columnDefinition,
    columnType,
  } = params;

  return {
    viewName,
    viewDesc,
    viewType,
    viewUi: JSON.stringify({ pageData, allFormConfig }),
    columnDefinition,
    columnType,
  };
}

export async function createView(dto: CreateViewDto) {
  return post<ResultBean<any>>("/process/view/viewSave", dto);
}

export async function listView(dto: CreateViewDto) {
  return post<ResultBean<any>>("/process/view/viewList", dto);
}

//根据类型获取下拉列表
export async function listViewByType(category: string) {
  return post<ResultBean<any>>("/process/view/listView", category);
}
